package org.spiniper.im.data.model;

import java.io.Serializable;

import org.spiniper.im.data.model.enums.InteractivityType;
import org.spiniper.im.data.model.enums.NoteMsgType;

/**
 * 发送消息，即时通讯任何数据传输的开始都通过消息开始
 * 通过不同种类的消息判定发送数据的类型以及接下来的动作
 * 消息相当于基础指令集，通过不同类型的消息进行数据接收，或者传输或者处理等待操作
 * @author spiniper
 *
 */
public interface NoteMessage extends Serializable{
	
	/**
	 * 消息类型
	 * @return 消息类型，指令，文本或者数据流
	 */
	NoteMsgType getType();
	
	/**
	 * 消息唯一标识，无论何时，消息标识都不会出现相同标识(在任何一个安全阶段内都不应该相同)
	 * @return 消息唯一标识
	 */
	String getId();
	
	/**
	 * 消息发送者
	 * @return 发送者
	 */
	Users getSender();
	
	/**
	 * 消息接受者
	 * @return 接收者
	 */
	Users getReceiver();
	
	/**
	 * 获得消息结果
	 * @return 消息结果对象
	 */
	MessageResults getResult();
}
